<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>

    // 作用域链：父不能拿子，子可以拿父，兄弟不能互拿，嵌套时，现在自身查找，找不到依次向上层作用域查找，任意一层找到了，就使用并停止，直到...

    // 原型链（简陋版）：使用时，先在自身查找，找到了就使用，找不到，依次向上层原型查找，任意一层找到了，就使用并停止，直到顶层，还找不到，抛出undefined
    
    // 规则：
    // 原型链：使用对象的属性或方法时，先在对象自身查找，找到了就使用，找不到，自动沿着原型链属性__proto__，依次向上层原型对象查找，任意一层找到了，就使用并停止，直到顶层原型对象Object.prototype，还找不到，抛出undefined

    // 万物皆对象

    // 隐式原型：原型链对象：原型指针：__proto__
    // 所有的对象数据，都自带隐式原型属性，隐式原型用来指向自身的上层原型对象
    // 当前对象的__proto__必然会指向 创建自身的构造函数的prototype

    // 显式原型：原型对象：prototype
    // 除了箭头函数之外的所有函数都具有显式原型对象：prototype，用来被 将来new自身函数创建出来的对象的__proto__ 指向

    function fn(){}

    const f = new fn();

    console.log(f.__proto__ === fn.prototype);



</script>
</html>